package com.wlit;
import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.serial.SerialParameters;
import com.intelligt.modbus.jlibmodbus.serial.SerialPort;
import com.intelligt.modbus.jlibmodbus.serial.SerialUtils;

public class ModbusPollExample {
    public static void main(String[] args) {
        try {
            Modbus.setLogLevel(Modbus.LogLevel.LEVEL_DEBUG);
            //SerialUtils.setSerialPortFactoryJSerialComm();
            SerialUtils.setSerialPortFactoryRXTX();
            SerialParameters params = new SerialParameters();
            //params.setDevice("/dev/ttyUSB0"); // 设置串口名，例如 /dev/ttyUSB0
            params.setDevice("COM3");
            params.setBaudRate(SerialPort.BaudRate.BAUD_RATE_9600); // 设置波特率
            params.setDataBits(8);
            params.setParity(SerialPort.Parity.NONE);
            params.setStopBits(1);


            ModbusMaster master = ModbusMasterFactory.createModbusMasterRTU(params);
            //master.setDebug(false);
            master.connect();
            master.setResponseTimeout(30000);

            // 确保连接成功
            if (master.isConnected()) {
                System.out.println("Connected to Modbus Slave");
            } else {
                System.out.println("Connection failed");
            }

            Thread.sleep(500);
            // 进行读取操作...
            // master.readInputRegisters(slaveId, offset, numRegs);
            for(int i=0; i< 10;i++) {
                int slaveId = 1; // 从机地址
                int offset = 0x0065; // 寄存器起始地址
                int numRegs = 10; // 要读取的寄存器数量

                int[] registerValues = master.readHoldingRegisters(slaveId, offset, numRegs);
                for (int value : registerValues) {
                    System.out.println("Register value: " + value);
                }
                System.out.println("---");

                Thread.sleep(3000);
            }

            master.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}